#include "StdAfx.h"
#include "Examenes.h"



void traspuesta(int m[][N],int n)
{
	traspuestaAux2(m,n,n-1,n-1);
}

void traspuestaAux(int m[][N],int n, int i, int j)
{
	if((i == 0) && (j == 0))
		return;
	else
	{
		if(i == j)
		{
			j--;
			i = n-1;
		}
		else
			i--;

		traspuestaAux(m,n,i,j);

		int aux = m[i][j];
		m[i][j] = m[j][i];
		m[j][i] = aux;
	}

}

void traspuestaAux2(int m[][N],int n, int i, int j)
{

	if((i == 0) && (j == 0))
		return;
	else
	{
		if(i == 0)
		{
			n = n-1;
			i = n;
			j = n;
			
		}
		else
			i--;

		traspuestaAux2(m,n,i,j);
		int aux = m[i][j];
		m[i][j] = m[j][i];
		m[j][i] = aux;

	}
}

// Junio 2008 - Ejercicio 2
// Implementado en .h


// Septiembre 2008 - Ejercicio 2
int sumaTADPila(TPilaDinamica<int>& pila)
{
	int suma;
	if(pila.esVacio())
		suma = 0;
	else
	{
		int num = pila.cima();
		pila.desapila();
		suma = num + sumaTADPila(pila);
		pila.apila(suma);
	}

	return suma;
}

int sumaTADSecuencia(TSecuenciaDinamica<int>& secuencia)
{
	int suma;
	if(secuencia.esFin())
		suma = 0;
	else
	{
		
		secuencia.avanza();
		suma = secuencia.actual() + sumaTADSecuencia(secuencia);
		secuencia.inserta(suma);
	}
	return suma;
}

// Febrero 2010 - Ejercicio 1
int buscarPar(int v[], int n)
{
	return buscarPareja(v,n-1);
}

int buscarPareja(int v[], int n)
{
	int mayorPareja;
	if(n == 0)
		mayorPareja = 0;
	else if((n >= 0) && (v[n] % 2 == 0))
		mayorPareja = buscarPareja(v,n-1);
	else if((n >= 0) && (v[n] % 2 != 0))
	{
		if(hayPareja(v,n-1,v[n]))
			mayorPareja = max(abs(v[n]),buscarPareja(v,n-1));
		else
			mayorPareja = buscarPareja(v,n-1);
	}
	return mayorPareja;
}

bool hayPareja(int v[], int n , int b)
{
	bool pareja;

	if(v[n] == -b)
		pareja = true;
	else if(n == 0)
		pareja = false;
	else if(n >= 0)
		pareja = hayPareja(v,n-1,b);

	return pareja;
		
}

// Junio 2010 - Ejercicio 1
// Ver examenes.h
